/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package produccion;

import java.text.DecimalFormat;
import java.util.ArrayList;

/**
 *
 * @author Jorge
 */
public class Block extends Publicacion implements IEncolado, IRefilado {
    
    private final Integer numPaginas;

    public Block(String titulo, String cliente, Formato formato,Integer numPaginas, Integer tiraje) {
        super(titulo, cliente, formato, tiraje);
        this.numPaginas = numPaginas;
    }

    public Integer getNumPaginas() {
        return numPaginas;
    }   

    @Override
    public Double calcularPlacas() {
        return 1.0;
    }

    @Override
    public Double calcularTiempoImpresion() {
        Double tiempoCubierta,tiempoInteriores=0.0;
        
        tiempoCubierta = getCubierta().calcularTiempoImpresion();
        
        for (int i = 0; i < getInterioresCompaginables().size(); i++) {
            tiempoInteriores += getInterioresCompaginables().get(i).calcularTiempoImpresion();
        }
        
        return tiempoCubierta + tiempoInteriores;  
    }

    @Override
    public Double calcularTiempoEncolado() {
        return getTiraje() / getNumPaginas() / 200.0;
    }

    @Override
    public Double calcularTiempoRefilado() {
        return getTiraje() / getNumPaginas() / 250.0;
    }
    
    private Double calcularTiempoAcabado(){
        return calcularTiempoEncolado() + calcularTiempoRefilado();
    }
    
    private Double calcularTiempoProduccion(){
        return calcularTiempoImpresion() + calcularTiempoAcabado();
    }    
    
    public static void main(String[] args) {
        DecimalFormat df = new DecimalFormat("#.#####");
        
        Block b = new Block("BLOCK SISTEMAS","UNMSM",Formato.A5,24,500);
        b.setTiraje(b.getNumPaginas()*b.getTiraje());
        Cubierta c = new Cubierta(TCubierta.COUCHE_BRILLANTE,Color.CUATRO,new Maquina(NMaquina.ROLAND300));
        
        InteriorNoCompaginable inte1 = new InteriorNoCompaginable(Color.UNO,Color.UNO,new Maquina(NMaquina.DAVIDSON),new Maquina(NMaquina.DAVIDSON));
        //Interior inte2 = new Interior(2.0,Color.CUATRO,Color.CUATRO,new Maquina(NMaquina.ROLAND),new Maquina(NMaquina.ROLAND));
        //Interior inte3 = new Interior(4.0,Color.CUATRO,Color.UNO,new Maquina(NMaquina.ROLAND),new Maquina(NMaquina.ROTAPRINT));
        
        ArrayList<InteriorNoCompaginable> inters = new ArrayList<InteriorNoCompaginable>();
        inters.add(inte1);
        //inters.add(inte2);
        //inters.add(inte3);
        
        c.setPub(b);
        b.setCubierta(c);
        
        inte1.setPub(b);
        //inte2.setPub(l);
        //inte3.setPub(l);
        b.setInterioresNoCompaginables(inters);
        
        System.out.println("Titulo: " + b.getTitulo());
        System.out.println("=====================CUBIERTA====================");
        System.out.println("placas tira: " + df.format(b.getCubierta().calcularPlacasTira()));
        System.out.println("placas retira: " + df.format(b.getCubierta().calcularPlacasRetira()));
        System.out.println("placas totales: " + df.format(b.getCubierta().calcularPlacas()));
        System.out.println("tiempo tira: " + df.format(b.getCubierta().calcularTiempoImpresionTira()));
        System.out.println("tiempo retira: " + df.format(b.getCubierta().calcularTiempoImpresionRetira()));
        System.out.println("tiempo muerto: " + df.format(b.getCubierta().calcularTiempoMuerto()));
        System.out.println("TIEMPO TOTAL CUBIERTA: " + df.format(b.getCubierta().calcularTiempoImpresion()));
        
        System.out.println("=====================INTERIORES====================");
        for (int i = 0; i < inters.size(); i++) {
            System.out.println("<<<<<Interior: " + (i+1) + ">>>>>");
            System.out.println("pliegos: " + df.format(b.getInterioresCompaginables().get(i).getNumPliegos()));
            System.out.println("placas tira: " + df.format(b.getInterioresCompaginables().get(i).calcularPlacasTira()));
            System.out.println("placas retira: " + df.format(b.getInterioresCompaginables().get(i).calcularPlacasRetira()));
            System.out.println("placas totales: " + df.format(b.getInterioresCompaginables().get(i).calcularPlacas()));
            System.out.println("tiempo tira: " + df.format(b.getInterioresCompaginables().get(i).calcularTiempoImpresionTira()));
            System.out.println("tiempo retira: " + df.format(b.getInterioresCompaginables().get(i).calcularTiempoImpresionRetira()));
            System.out.println("tiempo muerto: " + df.format(b.getInterioresCompaginables().get(i).calcularTiempoMuerto()));
            System.out.println("TIEMPO TOTAL INTERIOR "+ (i+1)+ ": " + df.format(b.getInterioresCompaginables().get(i).calcularTiempoImpresion()));
            System.out.println("");
        }

        System.out.println("=====================BLOCK=========================");
        System.out.println("=====Impresión=====");
        System.out.println("Pliegos totales: " + df.format(b.calcularPliegos()));
        System.out.println("Placas totales (interiores): " + df.format(b.calcularPlacas()));
        System.out.println("Tiempo total impresion block: " + df.format(b.calcularTiempoImpresion()));
        System.out.println("======Encolado=====");
        System.out.println("Tiempo encolado: " + df.format(b.calcularTiempoEncolado()));
        System.out.println("======Refilado=====");
        System.out.println("Tiempo refilado: " + df.format(b.calcularTiempoRefilado())); 
        
        System.out.println("Tiempo Acabados total: " + df.format(b.calcularTiempoAcabado()));
        
        System.out.println("Tiempo Producción total block: " + df.format(b.calcularTiempoProduccion()));        
    }   
}
